package com.haohan.jingyuan.gateway.holder;

import com.haohan.jingyuan.gateway.context.UserContext;
import lombok.extern.slf4j.Slf4j;

/**
 * 用户上下文ThreadLocal工具类
 *
 * @ClassName UserContextHolder
 * @Description 使用ThreadLocal存储和获取当前登录用户信息
 * @Author hexijun
 * @Time 2025/01/19 16:00
 * @Version 1.0
 */
@Slf4j
public class UserContextHolder {

    /**
     * 用户上下文ThreadLocal
     */
    private static final ThreadLocal<UserContext> USER_CONTEXT = new ThreadLocal<>();

    /**
     * 设置用户上下文
     *
     * @param userContext 用户上下文
     */
    public static void setUserContext(UserContext userContext) {
        USER_CONTEXT.set(userContext);
    }

    /**
     * 获取用户上下文
     *
     * @return 用户上下文
     */
    public static UserContext getUserContext() {
        return USER_CONTEXT.get();
    }

    /**
     * 获取当前用户ID
     *
     * @return 用户ID
     */
    public static String getCurrentUserId() {
        UserContext context = getUserContext();
        return context != null ? context.getUserId() : null;
    }

    /**
     * 获取当前用户名
     *
     * @return 用户名
     */
    public static String getCurrentUserName() {
        UserContext context = getUserContext();
        return context != null ? context.getUserName() : null;
    }

    /**
     * 获取当前用户token
     *
     * @return 用户token
     */
    public static String getCurrentToken() {
        UserContext context = getUserContext();
        return context != null ? context.getToken() : null;
    }

    /**
     * 清除用户上下文
     */
    public static void clear() {
        UserContext context = getUserContext();
        if (context != null) {
            // log.debug("清除用户上下文: userId={}, userName={}",context.getUserId(), context.getUserName());
        }
        USER_CONTEXT.remove();
    }
}